/**
//栈排序。 编写程序，对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据，但不得将元素复制到别的数据结构（如数组）中。该栈支持如下操作：
//push、pop、peek 和 isEmpty。当栈为空时，peek 返回 -1。 
//
// 示例1: 
//
//  输入：
//["SortedStack", "push", "push", "peek", "pop", "peek"]
//[[], [1], [2], [], [], []]
// 输出：
//[null,null,null,1,null,2]
// 
//
// 示例2: 
//
//  输入： 
//["SortedStack", "pop", "pop", "push", "pop", "isEmpty"]
//[[], [], [], [1], [], []]
// 输出：
//[null,null,null,null,null,true]
// 
//
// 说明: 
//
// 
// 栈中的元素数目在[0, 5000]范围内。 
// 
// Related Topics 栈 设计 单调栈 👍 43 👎 0

*/

package com.xixi.medium;

import java.util.Stack;

public class ID_interview_03_05_SortOfStacksLcci {
public static void main(String[] args) {
    SortedStack solution = new ID_interview_03_05_SortOfStacksLcci().new SortedStack();
}


//leetcode submit region begin(Prohibit modification and deletion)
class SortedStack {

    Stack<Integer> sortedQueue;
    Stack<Integer> compareQueue;

    public SortedStack() {
        sortedQueue = new Stack<Integer>(); //排序好的栈
        compareQueue = new Stack<Integer>(); //用于比较临时存放的栈
    }

    /**
     * 使最小元素位于栈顶
     * @param val
     */
    public void push(int val) {
        if(sortedQueue.isEmpty()){ //sortedQueue为空不用比较，直接放进去就好
            sortedQueue.push(val);
        }else{//不为空需要依次和栈顶元素进行比较，栈顶元素一次放入临时栈compareQueue
            while(!sortedQueue.isEmpty() && sortedQueue.peek() <= val  ){
                compareQueue.push(sortedQueue.pop());
            }//把小于val的元素都放到compareQueue
            sortedQueue.push(val);
            //最后把compareQueue里面的元素返回sortedQueue
            while(!compareQueue.isEmpty()){
                sortedQueue.push(compareQueue.pop());
            }

        }



    }

    public void pop() {
        if(!sortedQueue.isEmpty()){
            sortedQueue.pop();
        }

    }

    public int peek() {
        if(sortedQueue.isEmpty()){
            return  -1;
        }else {
            return sortedQueue.peek();
        }

    }

    public boolean isEmpty() {
        return sortedQueue.isEmpty();
    }
}

/**
 * Your SortedStack object will be instantiated and called as such:
 * SortedStack obj = new SortedStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.isEmpty();
 */
//leetcode submit region end(Prohibit modification and deletion)




}